Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Lecture fichier - code avec commentaires (suite 2)

 /* La suite ne sert que pour le programmeur (ce sont des
    commentaires qui permettent de se rappeler certaines
    constantes).
 */
 //''Mode de lecture du fichier, un flux est nécessaire''
 //''Le second argument définit les différents modes de lecture parmis''
 //''PR_RDONLY     =0x01 lecture seulement''
 //''PR_WRONLY     =0x02 écriture seulement''
 //''PR_RDWR       =0x04 lecture ou écriture''
 //''PR_CREATE_FILE=0x08 si le fichier n'existe pas, il est créé (sinon, sans effet)''
 //''PR_APPEND     =0x10 le fichier est positionné à la fin avant chaque écriture''
 //''PR_TRUNCATE   =0x20 si le fichier existe, sa taille est réduite à zéro''
 //''PR_SYNC       =0x40 chaque écriture attend que les données ou l'état du fichier soit mis à jour''
 //''PR_EXCL       =0x80 idem que PR_CREATE_FILE, sauf que si le fichier existe, NULL est retournée''
 //''Le troisième argument définit les droits''
 /* Fin des repères concernant les constantes
   On va demander une nouvelle fois à mozilla de nous rendre
   un service.
   On va lui demander de nous créer une instance pour ouvrir
   un fichier en lecture. On l'appellera "inputStream"
   note 1 : dans le code original, elle s'appelle "is".
   note 2 : inputStream = flux d'entrée.
 */
 var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"]
         .createInstance( Components.interfaces.nsIFileInputStream );
 /*
    Maitenant qu'on a notre clone, on va l'initialiser, c'est à dire lui
    préciser ce qu'il doit avoir dans le ventre :
 */
 inputStream.init(file, 0x01, 00004, null);
 /*
   Quel fichier ? veut-il savoir en premier. On lui répond : « le fichier
   'file' qu'on a créé un peu plus haut.»
   Qu'est-ce que vous voulez faire dessus ? veut-il savoir ensuite. On lui
   répond : « rassure-toi, juste le lire » (0x01 = read only)
   ''(des meilleurs que moi préciseront les deux arguments suivants. Il me
   semble qu'ils concernent les autorisations sur le fichier et le buffering
   du fichier, mais je n'en suis pas assez sûr)''
 */
 /*
   Maintenant qu'on a créé un flux, il va falloir lui dire comment
   on veut le lire.
   On demande à nouveau service à mozilla (que ferait-on sans lui ?),
   en lui disant qu'on voudrait lire en "binaire" (pour faire simple :
   lire sans faire aucune interprétation du contenu du fichier)
 */
 var sis = Components.classes["@mozilla.org/binaryinputstream;1"]
          .createInstance(Components.interfaces.nsIBinaryInputStream);
 sis.setInputStream( inputStream );
 /*
    On dit à javascript que ce service doit utiliser le flux 'inputStream'
    que nous avons créé avant.
 */
 var output = sis.readBytes( sis.available() );
 /*
    C'est ici qu'on lit véritablement le fichier, par bytes. Ce que l'on
    lira sera mis dans la variable (var) 'output'.
    sis.available() : pour dire de lire TOUT le fichier. On aurait pu
    lui dire de n'en lire qu'une partie.
 */
 // Enfin, nous renvoyons à notre fonction principale le contenu
 // du fichier
 return output;
 }
 /* Fin de la fonction 'read(…)'
 ]]>
 /*
    On dit au programme que nous avons fini d'écrire des "données
    brutes". Ces accolades font références au CDATA plus haut
 */
 </script>
 /*
    Nous avons fini la définition de notre code javascript.
    Maintenant va véritablement commencer le code de notre page.
 */
 <[[html:h1>Test]] de lecture d'un fichier</[[html:h1]]>
 <!--
     Nous voulons écrire un titre (h1).
     Notez l'utilisation du "[[html:h1]]" qui dit à l'interpréteur :
     Attention, ce n'est pas une balise XML (ou plutôt XUL), c'est
     une balise HTML (il comprendra, parce que nous avons défini
     l'espace de nom — namespace — dans le <window…> en haut de page.
 -->
 <hbox style = "overflow: auto;" flex="1">
 <!--
     Une balise xul normale, qui dit de construire une boîte (box)
     horizontale (le "h" avant le "box").
     style="[[overflow:auto]]" : pour dire au générateur de rendu de s'occuper
     lui-même du "dépassement de texte". Si le texte est trop long,
     il ajoutera lui-même un ascenseur pour atteindre tout le texte.
     Si la boîte est plus grosse que le texte, il n'y aura pas d'as-
     censeur.
     flex="1" : pour dire que la boîte doit être flexible, souple. Elle
     s'adaptera à la dimension de la fenêtre, qui est son conteneur (son
     parent).
 -->
   <[[html:pre]] id="contenu">…</[[html:pre]]>
   <!--
       Dans la boîte que nous avons créée, nous allons mettre l'élément
       qui doit recevoir le contenu du fichier (qui a pour nom "contenu",
       qui renvoie directement au 'document.getElementById' que nous
       avons défini dans javascript.
       On met un point de suspension en attendant, mais il sera remplacé
       par le texte du fichier (ou le message d'erreur) sitôt après le
       chargement de la page.
       Notez, à nouveau, l'utilisation de "html:" pour préciser que c'est
       un élément HTML. Cet élément est un 'pre', c'est à dire qu'il doit
       afficher le texte exactement comme il se présente dans le fichier.
       Les retours de chariot, habituellement "invisibles" dans une page
       HTML, seront bien des retours de chariot.
   -->
 </hbox>
 <!--
      On ferme la boîte horizontale.
      Notez que puisque cette boîte ne contient qu'un seul élément, elle
      aurait être verticale (vbox) sans rien changer à l'affichage.
 -->
 <label value="…" id="nom_fichier"/>
 <!--
     Le dernier élément à mettre dans la fenêtre, c'est le petit texte
     où nous devons préciser le chemin d'accès du fichier qui, rappelez-
     vous, doit s'appeler 'nom_fichier'.
     Ici aussi, on met en attendant un point de suspension.
 -->
 </window>
 <!--
     On ferme la fenêtre, et c'est la fin du fichier.
 -->

Explications

La fonction débute par l'obtention de privilèges supplémentaire pour accéder à votre système de fichiers. C'est une condition obligatoire si vous lancez cette page en local, mais inutile si vous la lancez depuis une adresse chrome.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.